package com.imooc.utils;

import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.tea.TeaException;
import com.aliyun.teautil.models.RuntimeOptions;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

@Component
@Slf4j
public class SmsUtil {
//    @Autowired
//    private RedisTemplate<String,Object> redisTemplate;
    @Autowired
    private RedisOperator redis;
    public static com.aliyun.dysmsapi20170525.Client createClient() throws Exception {

        // 工程代码泄露可能会导致 AccessKey 泄露，并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        // 建议使用更安全的 STS 方式，更多鉴权访问方式请参见：https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填，请确保代码运行环境设置了环境变量 。LTAI5tE2gsc6HMXpBi9tnT65
                .setAccessKeyId("LTAI5tE2gsc6HMXpBi9tnT65")
                // 必填，请确保代码运行环境设置了环境变量 。 W5ZnuQGuX7Pbs60vfmhWWvlnXRemRg
                .setAccessKeySecret("W5ZnuQGuX7Pbs60vfmhWWvlnXRemRg");
        // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
        config.endpoint = "dysmsapi.aliyuncs.com";
        return new com.aliyun.dysmsapi20170525.Client(config);
    }

    public static void main(String[] args) {
        SmsUtil smsUtil = new SmsUtil();
//        smsUtil.SendMessage("15624436372");
    }
    public void SendMessage(String iphone)  {
        com.aliyun.dysmsapi20170525.Client client = null;
        try {
            client = SmsUtil.createClient();
        } catch (Exception e) {
            e.printStackTrace();
        }
        Integer randomNumber = generateSixDigitRandomNumber();
        System.out.println("随机生成的6位数: " + randomNumber);
        Map<String,String> map = new HashMap<>();
        map.put("code",randomNumber.toString());
        log.info("验证码==============================>{}",randomNumber);
        redis.set("mobile:smscode"+":"+iphone,randomNumber.toString(),30*60);
//        redisTemplate.opsForValue().set(Constant.SMSADDRESS+":"+Constant.MOBILE_PHONE+":"+iphone,randomNumber.toString(), 60,
//                TimeUnit.SECONDS);
        // 发送验证码
//            TODO 发送验证码
//        com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
//                .setPhoneNumbers(iphone)
//                .setSignName("云端堡垒")
//                .setTemplateCode("SMS_474090250")
//                .setTemplateParam(mapToJson(map));
        try {
            // 复制代码运行请自行打印 API 的返回值
//            SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, new RuntimeOptions());
//            System.out.println(sendSmsResponse.body.message);
        } catch (TeaException error) {
            // 此处仅做打印展示，请谨慎对待异常处理，在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示，请谨慎对待异常处理，在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }
    }
    public static int generateSixDigitRandomNumber() {
        Random random = new Random();
        // 生成一个6位数的随机数范围：100000 到 999999
        return 100000 + random.nextInt(900000);
    }
    public static String mapToJson(Map<String, String> map) {
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            return objectMapper.writeValueAsString(map);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
